home *** CD-ROM | disk | FTP | other *** search
/ Workbench Add-On / Workbench Add-On - Volume 1.iso / BBS-Archive / Dev / Obrn-A_1.6_lib.lha / oberon-a / source3.lha / source / ProgInOberon / RandomNumbers.mod < prev   
Text File  |  1995-07-02  |  1KB  |  61 lines

  1. (*************************************************************************
  2.  
  3.      $RCSfile: RandomNumbers.mod $
  4.   Description: Random number generator from "Programming In Oberon"
  5.  
  6.    Created by: fjc (Frank Copeland)
  7.     $Revision: 1.10 $
  8.       $Author: fjc $
  9.         $Date: 1995/06/04 23:23:57 $
  10.  
  11.   Copyright © 1990-1993, ETH Zuerich
  12.   Copyright © 1994, Frank Copeland.
  13.   This file is part of the Oberon-A Library.
  14.   See Oberon-A.doc for conditions of use and distribution.
  15.  
  16. *************************************************************************)
  17.  
  18. MODULE RandomNumbers;
  19.  
  20. IMPORT d := Dos;
  21.  
  22. VAR z : LONGINT;
  23.  
  24. (*------------------------------------*)
  25. PROCEDURE Uniform * () : REAL;
  26.  
  27.   CONST a = 16807; m = 2147483647; q = m DIV a; r = m MOD a;
  28.  
  29.   VAR gamma : LONGINT;
  30.  
  31. BEGIN (* Uniform *)
  32.   gamma := a * (z MOD q) - r * (z DIV q);
  33.   IF gamma > 0 THEN z := gamma
  34.   ELSE z := gamma + m
  35.   END;
  36.   RETURN z * (1.0 / m)
  37. END Uniform;
  38.  
  39. (*------------------------------------*)
  40. PROCEDURE InitSeed * (seed : LONGINT);
  41.  
  42. BEGIN (* InitSeed *)
  43.   z := seed
  44. END InitSeed;
  45.  
  46. (*------------------------------------*)
  47. PROCEDURE TimeSeed * ();
  48.  
  49.   VAR ds : d.Date; x : REAL;
  50.  
  51. BEGIN (* TimeSeed *)
  52.   d.DateStamp (ds);
  53.   z := (ds.minute * (60 * d.ticksPerSecond)) + ds.tick;
  54.   x := Uniform()
  55. END TimeSeed;
  56.  
  57. BEGIN
  58.   z := 314159
  59. END RandomNumbers.
  60.  
  61.